package thread;

import lombok.SneakyThrows;

/**
 * 线程的常用方法介绍：
 *  start：启动一个线程。在新的线程中执行run方法。
 *  run：新线程启动后会调用的方法。
 *  join：等待线程运行结束。
 *  join(long n)：带时间的等待。
 *  getId：获取线程的一个id。
 *  getName：获取线程的名字。
 *  setName：修改线程的名字。
 *  getPriority：获取线程的优先级。
 *  setPriority：设置线程的优先级。
 *  getState：获取线程状态。
 *  isInterrupted：判断是否被打断。
 *  isAlive：判断当前线程是否存活。
 *  interrupted：判断当前线程是否被打断。
 *  currentThread：获取当前正在执行的线程。
 *  sleep：让当前线程休眠n毫秒，休眠时让出CPU时间片给其他线程。
 *  yield：提示线程调度器让出当前线程对CPU的使用。（线程让步）。
 */
public class ThreadMethod {

    /**
     * join方法
     * @param args
     */
    public static void main(String[] args) throws InterruptedException {
        Thread t1 = new Thread(new Runnable() {
            @SneakyThrows
            @Override
            public void run() {
                Thread.sleep(1000);
                System.out.println("当前线程为："+Thread.currentThread().getName());
            }
        },"t1");
        Thread t2 = new Thread(new Runnable() {
            @SneakyThrows
            @Override
            public void run() {
                Thread.sleep(1000);
                System.out.println("当前线程为1："+Thread.currentThread().getName());
            }
        },"t2");

        //开启两个线程：
        t1.start();
        t2.start();

        //现在，如果我们向等待，t1、t2线程结束再执行主线程的方法。
        t1.join();
        //调用 t1.join方法等于，再当前线程中，等待t1线程结束之后在执行。
        t2.join();
        //不能这样写：在本线程中调用本线程的join方法，会卡死程序。
//        Thread.currentThread().join();
        System.out.println("主线程结束了");
    }

    /**
     * 中断方法：isInterrupted
     */
}
